package com.lailai.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.Map;

/**
 * 路由实体类
 *
 * @Author lgr
 * @Date 2025/6/27
 * @Wechat a983105834
 * @Email 983105834@qq.com
 * @Copyright <a href="www.lailai.ink">lailai个人空间</a>
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("routes")
public class Route {
    /**
     * 路由主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 父级ID（0表示一级路由）
     */
    @TableField("parent_id")
    private Long parentId;

    /**
     * 路由名称
     */
    @TableField("name")
    @NotBlank(message = "名称不能为空")
    private String name;

    /**
     * 路由路径
     */
    @TableField("path")
    @NotBlank(message = "路由路径")
    private String path;

    /**
     * 组件路由
     */
    @TableField("component_path")
    private String componentPath;

    /**
     * 重定向配置，当匹配此路由时跳转到指定路径。
     */
    @TableField("redirect")
    private String redirect;

    /**
     * 是否将参数作为 props 传入组件。
     * 键为组件名，值为布尔值或参数映射规则。
     */
    @TableField("props")
    private Map<String, Object> props;

    /**
     * 层级（1-3）
     */
    @Min(value = 1, message = "层级必须大于等于1")
    @Max(value = 3, message = "层级不能超过3")
    @TableField("level")
    private Integer level;

    /**
     * 排序
     */
    @TableField("sort_order")
    @Min(value = 0, message = "排序不能小于0")
    private Integer sort;

    /**
     * 状态（0-禁用，1-启用）
     */
    @TableField("status")
    @Min(value = 0, message = "状态值不能小于0")
    @Max(value = 1, message = "状态值只能为0或1")
    private Integer status;

    /**
     * 前端路由配置
     */
    @TableField(exist = false)
    private RouteConfig routesConfig;

    /**
     * 创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 修改时间
     */
    @TableField("update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
